﻿
namespace Jim.K3Cloud;

public class K3CloudSaveRequestData
{
    /// <summary>
    /// 需要更新的字段，数组类型，格式：[key1,key2,...] （非必录）注（更新单据体字段得加上单据体key）
    /// </summary>
    public string[] NeedUpDateFields { get; set; }
    /// <summary>
    /// 需返回结果的字段集合，数组类型，格式：[key,entitykey.key,...]（非必录） 注（返回单据体字段格式：entitykey.key）
    /// </summary>
    public string[] NeedReturnFields { get; set; }
    /// <summary>
    /// 是否删除已存在的分录，布尔类型，默认true（非必录）
    /// </summary>
    public bool IsDeleteEntry { get; set; } = true;
    /// <summary>
    /// 表单所在的子系统内码，字符串类型（非必录）
    /// </summary>
    public string SubSystemId { get; set; }
    /// <summary>
    /// 是否验证所有的基础资料有效性，布尔类，默认false（非必录）
    /// </summary>
    public bool IsVerifyBaseDataField { get; set; }
    /// <summary>
    /// 是否批量填充分录，默认true（非必录）
    /// </summary>
    public bool IsEntryBatchFill { get; set; } = true;
    /// <summary>
    /// 是否验证标志，布尔类型，默认true（非必录）
    /// </summary>
    public bool ValidateFlag { get; set; } = true;
    /// <summary>
    /// 是否用编码搜索基础资料，布尔类型，默认true（非必录）
    /// </summary>
    public bool NumberSearch { get; set; } = true;
    /// <summary>
    /// 是否自动调整JSON字段顺序，布尔类型，默认false（非必录）
    /// </summary>
    public bool IsAutoAdjustField { get; set; }
    /// <summary>
    /// 交互标志集合，字符串类型，分号分隔，格式："flag1;flag2;..."（非必录） 例如（允许负库存标识：STK_InvCheckResult）
    /// </summary>
    public string InterationFlags { get; set; }
    /// <summary>
    /// 是否允许忽略交互，布尔类型，默认true（非必录）
    /// </summary>
    public bool IgnoreInterationFlag { get; set; } = true;
    /// <summary>
    /// 是否控制精度，为true时对金额、单价和数量字段进行精度验证，默认false
    /// </summary>
    public bool IsControlPrecision { get; set; }
    /// <summary>
    /// 校验Json数据包是否重复传入，一旦重复传入，接口调用失败，默认false（非必录）
    /// </summary>
    public bool ValidateRepeatJson { get; set; }
}

public class K3CloudSaveRequestData<T> : K3CloudSaveRequestData
{
    /// <summary>
    /// 表单数据包，JSON类型（必录）
    /// </summary>
    public T Model { get; set; }
}

/// <summary>
/// 暂存
/// </summary>
[Sdk("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Draft", "暂存")]
public class K3CloudDraftRequest: ISdkRequest<K3CloudSaveResponse>
{
    public string FormId { get; set; }
    public K3CloudSaveRequestData<object> Data { get; set; }
    public void Validate()
    {
    }
}
public class K3CloudDraftRequest<T> : K3CloudDraftRequest
{
    public new K3CloudSaveRequestData<T> Data { get; set; }
}

/// <summary>
/// 保存
/// </summary>
/// <typeparam name="T"></typeparam>
[Sdk("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save", "保存")]
public class K3CloudSaveRequest : ISdkRequest<K3CloudSaveResponse>
{
    public string FormId { get; set; }
    public K3CloudSaveRequestData<object> Data { get; set; }

    public void Validate()
    {
    }
}

public class K3CloudSaveRequest<T> : K3CloudSaveRequest
{
    public new K3CloudSaveRequestData<T> Data { get; set; }
}


public class K3CloudSaveResponse : SdkResponse<K3CloudSaveData>
{
}
public class K3CloudSaveData
{
    public int Id { get; set; }
    public string Number { get; set; }
    public List<object> NeedReturnData { get; set; }
}



/// <summary>
/// 批量保存
/// </summary>
[Sdk("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave", "批量保存")]
public class K3CloudBatchSaveRequest : ISdkRequest<K3CloudBatchSaveResponse>
{
    public string FormId { get; set; }
    public K3CloudSaveRequestData<object> Data { get; set; }
    public void Validate()
    {
    }
}
public class K3CloudBatchSaveRequest<T> : K3CloudBatchSaveRequest
{
    public new K3CloudSaveRequestData<T> Data { get; set; }
}

public class K3CloudBatchSaveResponse : SdkResponse { }